package com.arrays;
/**
 *
 **/

import java.util.Arrays;
import java.util.Comparator;
import java.util.function.IntBinaryOperator;
import java.util.function.IntToLongFunction;

/**
 * @Author weiwei
 * @Date 2022-09-19 19:03
 * @description Arrays工具类案例
 **/
public class ArraysExample {


    public static void main(String[] args) {
        parallelSort();
    }


    //排序-，它会在不同情况下运用不同的排序方法 双轴快排
    public static void parallelSort(){
        String[] arr1 = new String[]{"aa", "aaa", "aa", "a", "aaaaa"};
        // 使用Lambda表达式
        //Arrays.sort(arr1,(o1, o2) -> o1.length() - o2.length());
        // 使用匿名内部类
        Arrays.parallelSort(arr1, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                System.out.println(o1+":"+o2);
                return o1.length() - o2.length();
            }
        });
        System.out.println(Arrays.toString(arr1));
    }


    //right 代表当前元素  left代表上一个元素的值
    public static void parallelPrefix(){
        int[] arr2 = new int[]{3, -4, 25, 16, 30, 18};
        // left代表数组中前一个索引处的元素，计算第一个元素时，left为1
        Arrays.parallelPrefix(arr2, (left, right)-> left*right);
        // 使用匿名内部类
        Arrays.parallelPrefix(arr2, new IntBinaryOperator() {
            @Override
            public int applyAsInt(int left, int right) {
                return  left*right;
            }
        });
        System.out.println(Arrays.toString(arr2));
    }




    //每个元素做处理
    public static void parallelSetAll(){
        long[] arr3 = new long[5];
        // operand代表正在计算的元素索引
        Arrays.parallelSetAll(arr3, operand -> operand * 5L);
        // 使用匿名内部类
        Arrays.parallelSetAll(arr3, new IntToLongFunction() {
            @Override
            public long applyAsLong(int value) {
                return value * 5L;
            }
        });
        System.out.println(Arrays.toString(arr3));
    }
}
